<?php
declare (strict_types=1);

namespace app\command;

use app\admin\common\Lunar;
use app\admin\model\Admin;
use PHPMailer\PHPMailer\PHPMailer;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\Exception;
use think\facade\Config;

class Birthday extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('birthday')
            ->setDescription('生日提醒');
    }

    protected function execute(Input $input, Output $output)
    {
        //获取当前年份并且转换时间戳做对比使用
        $now_date = strtotime(date('Y-m-d'));
        $lunar = new Lunar();
        $mail = new PHPMailer(true);

        $admin = Admin::where('status', 1)->select();
        $zhufu = "";
        $count = 0;
        //0阳历 1农历
        foreach ($admin as $key => $value) {
            if ($value['lunar'] == 1) {
                $day = explode('-', $value['birthday']);
                $brithday = $lunar->convertLunarToSolar(date('Y'), $day[0], $day[1]);
            } else {
                $brithday = date('Y') . '-' . $value['birthday'];
            }
            if (strtotime($brithday) == $now_date) {
                $zhufu .= $value['nickname'] . '-' . (($value['lunar'] ? 0 : 1) ? '阳历' : '农历') . '-' . date('Y') . '-' . $value['birthday'] . '<br/>';
                $count++;
            }
        }
        $content = '<h3>今天是' . (($count > 1) ? $count . '位' : '') . '</h3>' . $zhufu . '<h3>的生辰</h3>';

        //配置服务器
        try {
            //服务器配置
            $mail->CharSet = Config::get('birthday.char_set');//设定邮件编码
            $mail->SMTPDebug = Config::get('birthday.smtp_debug');// 调试模式输出
            $mail->isSMTP();// 使用SMTP
            $mail->Host = Config::get('birthday.host');// SMTP服务器
            $mail->SMTPAuth = Config::get('birthday.smtp_auth');// 允许 SMTP 认证
            $mail->Username = Config::get('birthday.username');// SMTP 用户名  即邮箱的用户名
            $mail->Password = Config::get('birthday.password');// SMTP 密码  部分邮箱是授权码(例如163邮箱)
            $mail->SMTPSecure = Config::get('birthday.smtp_secure');                  // 允许 TLS 或者ssl协议
            $mail->Port = Config::get('birthday.port');                      // 服务器端口 25 或者465 具体要看邮箱服务器支持

            $mail->setFrom(Config::get('birthday.username'), 'liuhailong');  //发件人
            $mail->addAddress(Config::get('birthday.address'), '朱珊');  // 收件人
            //$mail->addAddress('ellen@example.com');  // 可添加多个收件人
            //$mail->addReplyTo('805858483@qq.com', 'liuhailong'); //回复的时候回复给哪个邮箱 建议和发件人一致
            //$mail->addCC('cc@example.com');                    //抄送
            //$mail->addBCC('bcc@example.com');                    //密送

            //发送附件
            // $mail->addAttachment('../xy.zip');         // 添加附件
            // $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名

            //Content


            $mail->isHTML(Config::get('birthday.ishtml'));                                  // 是否以HTML文档格式发送  发送后客户端可直接显
            // 示对应HTML内容
            $mail->Subject = '生日提醒';
            $mail->Body = $content;
            $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';
            $mail->send();
            echo '邮件发送成功';
        } catch (Exception $e) {
            echo '邮件发送失败: ', $mail->ErrorInfo;
        }
    }
}
